Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


meshchatx/src/backend/rnode_support.py 7eea421940d2baf28e6476c2736f889f5f3657a4 (7eea4219) Text, 2.83 KB

T8b949e# SPDX-License-Identifier: 0BSD

T8b949e"""RNode USB serial / BLE UART support checks for desktop and Android."""

Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations

Tff7b72import T7ee787logging

Te6edf3logger Tff7b72= Te6edf3loggingTff7b72.Td2a8ffgetLoggerTb4b4b4(Tff7b72__name__Tb4b4b4)


Tff7b72def Td2a8ff_is_chaquopy_androidTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787meshchatxT7ee787.T7ee787android_push_bridge Tff7b72import Te6edf3_is_chaquopy_android Tff7b72as Te6edf3_check

Tff7b72return Te6edf3_checkTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tff7b72return Tff7b72False


Tff7b72def Td2a8ffandroid_usbserial4a_availableTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""True when Chaquopy can import usbserial4a (RNS RNode on Android)."""
Tff7b72if Tff7b72not Te6edf3_is_chaquopy_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72import T7ee787usbserial4a T8b949e# noqa: F401
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True


Tff7b72def Td2a8ffdesktop_serial_stack_availableTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787serialT7ee787.T7ee787tools Tff7b72import Te6edf3list_ports T8b949e# noqa: F401
Tff7b72except Tf85149ImportErrorTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tff7b72True


Tff7b72def Td2a8ffrnode_serial_supportedTb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Whether RNode serial and ble:// UART ports can be opened on this platform."""
Tff7b72if Te6edf3_is_chaquopy_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3android_usbserial4a_availableTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3desktop_serial_stack_availableTb4b4b4(Tb4b4b4)


Tff7b72def Td2a8ffdisable_rnode_interfaces_in_configTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""Disable enabled RNode* interfaces in a Reticulum config file.

Returns True if any interfaces were disabled.
"""
Tff7b72import T7ee787os

Tff7b72if Tff7b72not Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3config_pathTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72tryTb4b4b4:
Tff7b72from T7ee787RNST7ee787.T7ee787vendorT7ee787.T7ee787configobj Tff7b72import Te6edf3ConfigObj

Te6edf3cfg Tff7b72= Te6edf3ConfigObjTb4b4b4(Te6edf3config_pathTb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72return Tff7b72False

Te6edf3modified Tff7b72= Tff7b72False
Te6edf3interfaces Tff7b72= Te6edf3cfgTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3interfacesTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72for Te6edf3_iface_nameTb4b4b4, Te6edf3iface Tff7b72in Te6edf3interfacesTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3ifaceTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3iface_type Tff7b72= Te6edf3ifaceTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3iface_typeTb4b4b4, Tffa657strTb4b4b4) Tff7b72and Te6edf3iface_typeTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffRNodeTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tffa657strTb4b4b4(Te6edf3ifaceTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffinterface_enabledTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72in Tb4b4b4(
Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffonTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6ffinterface_enabledTa5d6ff"Tb4b4b4] Tff7b72= Ta5d6ff"Ta5d6fffalseTa5d6ff"
Te6edf3modified Tff7b72= Tff7b72True
Tff7b72if Te6edf3modifiedTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3cfgTff7b72.Td2a8ffwriteTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
Tff7b72pass
Tff7b72return Te6edf3modified


Tff7b72def Td2a8ffguard_rnode_interfaces_on_androidTb4b4b4(Te6edf3config_pathTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e"""On Android without usbserial4a, disable RNode interfaces to avoid startup crashes."""
Tff7b72if Tff7b72not Te6edf3_is_chaquopy_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72if Te6edf3rnode_serial_supportedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3disabled Tff7b72= Te6edf3disable_rnode_interfaces_in_configTb4b4b4(Te6edf3config_pathTb4b4b4)
Tff7b72if Te6edf3disabledTb4b4b4:
Te6edf3loggerTff7b72.Td2a8ffwarningTb4b4b4(
Ta5d6ff"Ta5d6ffRNode interfaces were disabled because usbserial4a is not installed. Ta5d6ff"
Ta5d6ff"Ta5d6ffRebuild the Android app with usbserial4a or remove RNode entries from config.Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3disabled


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────